package com.chinaunicom.club.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.chinaunicom.club.dto.NetDto;
import com.chinaunicom.club.model.ClubDate;
import com.chinaunicom.club.model.Net;
import com.chinaunicom.club.service.IClubDate;
import com.chinaunicom.club.service.INet;
import com.chinaunicom.system.service.impl.DataServiceImpl;

@Controller
@RequestMapping("/club/net")
public class NetController {
	
	@Resource
	public INet netService;
	
	@Resource
	public IClubDate dateService;	
	
	/**
	 * 默认的展示俱乐部网点列表的方法
	 * @param model
	 * @return
	 */
	@RequestMapping("/queryAll")
	public String queryAll(Model model,Net net){
		//1.从数据字典中取出所有的网点级别值
		List<ClubDate> levels = dateService.selectByPid(4);
		//2.从数据字典中取出所有的服务类型值
		List<ClubDate> types = dateService.selectByPid(5);
		//3.从数据字典中取出所有的审核状态值
		List<ClubDate> checks = dateService.selectByPid(6);
		//4.从数据字典中取出所有的注销状态值
		List<ClubDate> cancels = dateService.selectByPid(7);
		//5.从CLUB_NET表中，取出所有的俱乐部网点信息
		List<Net> nets = netService.queryAll(net);
		//6.将这些数据传递给JSP页面
		model.addAttribute("levels", levels);
		model.addAttribute("types", types);
		model.addAttribute("checks", checks);
		model.addAttribute("cancels", cancels);
		model.addAttribute("nets", nets);
		model.addAttribute("condition",net);
		return "/WEB-INF/club/net/list.jsp";
	}
	
	/**
	 * 默认的展示俱乐部网点列表的方法
	 * @param model
	 * @return
	 */
	@RequestMapping("/pageQuery")
	@ResponseBody
	public Map<String,Object> pageQuery(NetDto dto,Integer page,Integer rows){
		//1.从数据字典中取出所有的网点级别值
		List<ClubDate> levels = dateService.selectByPid(4);
		//2.从数据字典中取出所有的服务类型值
		List<ClubDate> types = dateService.selectByPid(5);
		//3.从数据字典中取出所有的审核状态值
		List<ClubDate> checks = dateService.selectByPid(6);
		//4.从数据字典中取出所有的注销状态值
		List<ClubDate> cancels = dateService.selectByPid(7);
		//5.从CLUB_NET表中，取出所有的俱乐部网点信息
		List<NetDto> nets = netService.queryNetView(dto,page,rows);
		
		//6.统计CLUB_NET表中，总的数据条数
		int total = netService.count(dto);
		//7.构造符合分页条件的JSON数据
		Map<String,Object> map = new HashMap<>();
		map.put("total", total);
		map.put("rows", nets);
		map.put("levels", levels);
		map.put("types", types);
		map.put("checks", checks);
		map.put("cancels",cancels);
		map.put("condition", dto);
		//6.将这些数据传递给JSP页面
		//model.addAttribute("levels", levels);
		//model.addAttribute("types", types);
		//model.addAttribute("checks", checks);
		//model.addAttribute("cancels", cancels);
		//model.addAttribute("nets", nets);
		//model.addAttribute("condition",net);
		return map;
	}

	/**
	 * 点击某个网点名称，查看网点信息，通过网点ID从数据库获取数据之后展示到JSP上
	 * @param model
	 * @param id
	 * @return
	 */
	@RequestMapping("/queryById")
	public String queryById(Model model,int id){
		//1.通过ID从数据库中获取单个网点的信息
		Net net = netService.selectByPrimaryKey(id);
		//2.通过服务类型ID获取到服务类型的名字
		ClubDate type = dateService.selectByPrimaryKey(net.getServiceType());
		//3.通过级别类型ID获取到级别信息
		ClubDate level = dateService.selectByPrimaryKey(net.getNetLevel());
		//4.将以上信息传递给JSP页面
		model.addAttribute("net", net);
		model.addAttribute("type", type);
		model.addAttribute("level", level);
		return "/WEB-INF/club/net/viewDetail.jsp";
	}
	
	/**
	 * 跳转到添加俱乐部网点的页面
	 * @param model
	 * @return
	 */
	@RequestMapping("/toAdd")
	public String toAdd(Model model){
		//1.从数据字典中取出所有的网点级别值
		List<ClubDate> levels = dateService.selectByPid(4);
		//2.从数据字典中取出所有的服务类型值
		List<ClubDate> types = dateService.selectByPid(5);
		//3.将以上数据传送给JSP页面
		model.addAttribute("levels", levels);
		model.addAttribute("types", types);
		return "/WEB-INF/club/net/toAdd.jsp";
	}
	
	/**
	 * 将页面传递过来的新增网点信息保存到数据库中
	 * @param model
	 * @param net
	 * @return
	 */
	@RequestMapping("/save")
	public String save(Model model,Net net){
		//1.将页面传递过来的参数保存到数据库中
		netService.insert(net);
		return "/club/net/queryAll";
	}
	
	/**
	 * 根据ID跳转到修改该ID俱乐部网点的页面
	 * @param model
	 * @param id
	 * @return
	 */
	@RequestMapping("/toUpdate")
	public String toUpdate(Model model,int id){
		//1.通过ID获取到该ID俱乐部网点的信息
		Net net = netService.selectByPrimaryKey(id);
		//2.从数据字典中取出所有的网点级别值
		List<ClubDate> levels = dateService.selectByPid(4);
		//3.从数据字典中取出所有的服务类型值
		List<ClubDate> types = dateService.selectByPid(5);
		//4.将以上信息传递给JSP页面
		model.addAttribute("net", net);
		model.addAttribute("levels", levels);
		model.addAttribute("types", types);
		return "/WEB-INF/club/net/toUpdate.jsp";
	}
	
	/**
	 * 将修改后的数据保存到数据库中
	 * @param model
	 * @param net
	 * @return
	 */
	@RequestMapping("/update")
	public String update(Model model,Net net){
		//1.将页面传递过来的数据更新到数据库中
		netService.updateByPrimaryKey(net);
		return "/club/net/queryAll";
	}
	
	/**
	 * 跳转到审核页面
	 * @param model
	 * @param id
	 * @return
	 */
	@RequestMapping("/toCheck")
	public String toCheck(Model model,int id){
		//1.通过ID获取到该ID俱乐部网点的信息
		Net net = netService.selectByPrimaryKey(id);
		//2.从数据字典中取出所有的网点级别值
		ClubDate level = dateService.selectByPrimaryKey(net.getNetLevel());
		//3.从数据字典中取出所有的服务类型值
		ClubDate type = dateService.selectByPrimaryKey(net.getServiceType());
		//4.将以上信息传递给JSP页面
		model.addAttribute("net", net);
		model.addAttribute("level", level);
		model.addAttribute("type", type);		
		return "/WEB-INF/club/net/toCheck.jsp";
	}
	
	/**
	 * 根据审核结果，进行数据库数据的更改保存
	 * @param model
	 * @param id
	 * @param checkStatus
	 * @return
	 */
	@RequestMapping("/check")
	public String check(Model model,int id,int checkStatus){
		//1.获取到审核的网点ID和审核状态，1为审核通过，0为审核不通过，将数据更新到数据库
		netService.check(id,checkStatus);
		return "/club/net/queryAll";
	}
	
	/**
	 * 将需要进行删除的网点进行隐藏式删除，即is_del字段设置为0，默认值为1，表示没有删除
	 * @param model
	 * @param id
	 * @return
	 */
	@RequestMapping("/del")
	public String del(Model model,int id){
		//根据ID，将对应的网点进行隐藏式删除
		netService.hiddenById(id);
		return "/club/net/queryAll";
	}
	
	/**
	 * 跳转到单个网点的转正页面
	 * @param model
	 * @param id
	 * @return
	 */
	@RequestMapping("/toOfficial")
	public String toOfficial(Model model,int id){
		//1.通过ID获取到该ID俱乐部网点的信息
		Net net = netService.selectByPrimaryKey(id);
		//2.从数据字典中取出所有的网点级别值
		ClubDate level = dateService.selectByPrimaryKey(net.getNetLevel());
		//3.从数据字典中取出所有的服务类型值
		ClubDate type = dateService.selectByPrimaryKey(net.getServiceType());
		//4.将以上信息传递给JSP页面
		model.addAttribute("net", net);
		model.addAttribute("level", level);
		model.addAttribute("type", type);			
		return "/WEB-INF/club/net/toOfficial.jsp";
	}
	
	/**
	 * 将网点的注销状态更改为正式
	 * @param model
	 * @param id
	 * @return
	 */
	@RequestMapping("/official")
	public String official(Model model,int id){
		Net net = new Net();
		net.setId(id);
		net.setCancelStatus("正式");
		netService.updateByPrimaryKeySelective(net);
		return "/club/net/queryAll";
	}
	
	/**
	 * 将网点的注销状态更改为已注销
	 * @param model
	 * @param id
	 * @return
	 */
	@RequestMapping("/cancel")
	public String cancel(Model model,int id){
		Net net = new Net();
		net.setId(id);
		net.setIsCancel(1);
		net.setCancelStatus("已注销");
		netService.updateByPrimaryKeySelective(net);
		return "/club/net/queryAll";
	}
}
